/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Inference;

import java.util.HashMap;
import java.util.List;

/**
 *
 * @author Adrian
 */
public class ModuloExplicacion {

    private HashMap explicaciones= new HashMap();
    private HashMap totalContadores= new HashMap();
    private int numJuegosTotal=0;
    
    /**
     * @return the explicaciones
     */
    public HashMap getExplicaciones() {
        return explicaciones;
    }

    /**
     * @param explicaciones the explicaciones to set
     */
    public void setExplicaciones(HashMap explicaciones) {
        this.explicaciones = explicaciones;
    }
    
    public void crearExpliacion(String juego, String explicacion){
                
        if (juego!=null && explicacion!=null)
            this.explicaciones.put(juego, explicacion);        
    }
    
    public String obtenerExpliacion(String juego){
        
        String explicacion="";
        if (juego!=null && this.explicaciones!=null && this.explicaciones.get(juego)!=null)
            explicacion=(String)(this.explicaciones.get(juego));
        
        return explicacion;
    }
    
    public void agregarExpliacion(String juego, String explicacion){
                
        if (juego!=null && explicacion!=null){
            if(this.obtenerExpliacion(juego).trim().equals("")){
                this.crearExpliacion(juego, "Debido a su " + explicacion.substring(0, 1).toLowerCase() + explicacion.substring(1) );
            }else{
                String explicacionActual= this.obtenerExpliacion(juego);
                
                explicacionActual= explicacionActual + explicacion;
                
                this.crearExpliacion(juego, explicacionActual);
                
            }
            
        }
    }
    
    public void obtenerTotalesTipoContador(String tipoContador,HashMap contadores){
                
        Object valores[]= contadores.values().toArray();
        int sumaTotal=0;
        for(Object valor :valores ){
            //if (valor.getClass().isAssignableFrom(int.class)){
                sumaTotal+= (int)valor;
            //}
        }
        this.totalContadores.put(tipoContador, sumaTotal);  
        System.out.println(sumaTotal);
    }
    
    public void crearTipoContador(String tipoContador){
                
        if (totalContadores.get(tipoContador)==null){
            this.totalContadores.put(tipoContador, 0);            
        }        
    }
    
    public void iniciarTiposContadores(HashMap contadores){
        
        Object keys[]= contadores.keySet().toArray();
        
        for (Object tipo:keys){            
            this.crearTipoContador((String)tipo);
            if ((contadores.get((String)tipo)).getClass().isAssignableFrom(HashMap.class)){
                this.obtenerTotalesTipoContador((String)tipo, (HashMap)(contadores.get((String)tipo)));
            }
            System.out.println((String)tipo);
        }        
    }
    
    public void prepararModuloExplicacon(HashMap contadores, int numJuegosProcesados ){
        
        this.iniciarTiposContadores(contadores);
        this.numJuegosTotal=numJuegosProcesados;
        
    }
    
    public void realizaExplicacion(String juego, String tipo, String categoria ,int pesoJuego, int pesoTipo, String descripcionTipo){
        
        int numTipo= (int) (this.totalContadores.get(tipo));
        double pesoTotalTipo=numTipo*pesoTipo;
        double indice= ((double)pesoJuego/pesoTotalTipo);
        
        System.out.println(juego+ tipo+categoria+ pesoJuego+" "+pesoTipo+ descripcionTipo+" "+pesoTotalTipo+" "+numTipo+" " + indice);
        
        String explicacion="";
        if (indice>Constants.LIMITE_ALTO )            
            explicacion=explicacion + "Gran gusto por ";            
        else
            if (indice>Constants.LIMITE_MEDIO )
                explicacion=explicacion + "Gusto por ";
            else
                if (indice>Constants.LIMITE_BAJA )
                    explicacion=explicacion + "Prescencia de ";
        
        if (indice > Constants.LIMITE_BAJA){
        
            explicacion= explicacion+descripcionTipo+" " + categoria + ". \n";

            this.agregarExpliacion(juego, explicacion);
        }
    }
}
